iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0


昨天我們探討了關聯式資料庫的基本概念和 SQL 基礎語法,今天我們將焦點轉向另一種日益盛行的資料庫類型 - 非關聯式資料庫(NoSQL),並以 MongoDB 為例,聊聊這種資料庫的應用場景。

什麼是非關聯式資料庫?

非關聯式資料庫,也稱為 NoSQL 資料庫,是一種非傳統表格關聯模型的資料庫系統,與關聯式資料庫不同,NoSQL 資料庫通常具有更靈活的結構,能夠處理大量非結構化資料,並提供高度的可擴展性。

非關連式資料庫的特性

  1. 靈活的資料模型
  2. 高度可擴展性
  3. 卓越的效能
  4. 處理大數據的能力

MongoDB

MongoDB 是最受歡迎的 NoSQL 資料庫之一,它使用靈活的文件模型來儲存資料,非常適合處理複雜的非結構化資料。

MongoDB 的主要特點

  1. 文件導向儲存:資料以類似 JSON 格式儲存
  2. 靈活的資料結構:無需預先定義結構
  3. 強大的查詢語言:支援複雜查詢和彙總操作
  4. 高可用性和水平擴展:透過分片實現
  5. 索引支援:提升查詢效率

MongoDB 適用場景

讓我們透過實際案例來了解 MongoDB 在處理複雜、多變資料結構時的優勢。

AWS(Amazon Web Services)作為全球最大的雲端供應商,提供非常多元的雲端服務,每種服務的計費模式和細項名稱都不盡相同,因此在每個項目之間建立正規化資料表挺繁瑣耗時的,透過 MongoDB 靈活資料結構的特性,來儲存這些多樣化的帳單明細,可以輕鬆應對不同服務的獨特屬性。

以下是幾個 AWS 服務帳單資料在 MongoDB 中的例子:

// EC2
{
  "_id": ObjectId("5f8a7b2b9d3b2c1b4c5d6e7f"),
  "service": "EC2",
  "instanceId": "i-1234567890abcdef0",
  "usageType": "BoxUsage:t2.micro",
  "startTime": ISODate("2023-10-01T00:00:00Z"),
  "endTime": ISODate("2023-10-01T01:00:00Z"),
  "region": "us-east-1",
  "cost": 0.0116,
  "currency": "USD",
  "attributes": {
    "instanceType": "t2.micro",
    "vCPU": 1,
    "memory": "1 GiB",
    "operatingSystem": "Linux"
  }
}

// S3
{
  "_id": ObjectId("5f8a7b2b9d3b2c1b4c5d6e80"),
  "service": "S3",
  "bucketName": "my-data-bucket",
  "usageType": "StorageUsage",
  "startTime": ISODate("2023-10-01T00:00:00Z"),
  "endTime": ISODate("2023-10-31T23:59:59Z"),
  "region": "us-west-2",
  "cost": 0.023,
  "currency": "USD",
  "attributes": {
    "storageClass": "Standard",
    "dataStored": "1.5 GB",
    "requestCount": {
      "GET": 1000,
      "PUT": 50
    }
  }
}

// RDS
{
  "_id": ObjectId("5f8a7b2b9d3b2c1b4c5d6e81"),
  "service": "RDS",
  "instanceId": "db-1234567890abcdef0",
  "usageType": "InstanceUsage:db.t3.micro",
  "startTime": ISODate("2023-10-01T00:00:00Z"),
  "endTime": ISODate("2023-10-01T24:00:00Z"),
  "region": "eu-central-1",
  "cost": 0.017,
  "currency": "USD",
  "attributes": {
    "engineType": "MySQL",
    "deploymentOption": "Single-AZ",
    "storageType": "General Purpose SSD (gp2)",
    "allocatedStorage": "20 GB"
  }
}

在這個例子中,我們可以看到 MongoDB 如何靈活處理不同 AWS 服務的複雜計費資料:

  1. 靈活的資料結構:每種服務(EC2、S3、RDS)都有其獨特的屬性和計費模式,MongoDB 可以在同一個集合中儲存這些結構各異的文件,而無需預先定義固定的表格結構。

  2. 巢狀文件:對於像 S3 的 requestCount 這樣的物件屬性,MongoDB 允許使用巢狀文件,使資料結構更加直觀。

  3. 動態欄位:不同服務可能在未來新增新的計費指標,使用 MongoDB 可以輕鬆新增新欄位,而不需要修改整個資料庫結構。

  4. 高效查詢:儘管資料結構複雜,MongoDB 仍然可以高效地進行查詢。例如,我們可以輕鬆地查詢特定時間範圍內的所有 EC2 使用記錄:

    db.awsBilling.find({
      service: "EC2",
      startTime: { $gte: ISODate("2023-10-01T00:00:00Z") },
      endTime: { $lt: ISODate("2023-11-01T00:00:00Z") }
    })
    
  5. 彙總分析:MongoDB 的彙總框架允許進行複雜的資料分析,比如計算每個服務在特定月份的總成本:

    db.awsBilling.aggregate([
      {
        $match: {
          startTime: { $gte: ISODate("2023-10-01T00:00:00Z") },
          endTime: { $lt: ISODate("2023-11-01T00:00:00Z") }
        }
      },
      {
        $group: {
          _id: "$service",
          totalCost: { $sum: "$cost" }
        }
      }
    ])
    

這個 AWS Rawdata 的案例充分展示了 MongoDB 在處理複雜、多變資料結構時的優勢。它特別適合:

  1. 需要儲存結構各異的資料
  2. 資料模式可能隨時間變化
  3. 需要進行複雜的查詢和彙總分析
  4. 資料量大、需要高擴展性的場景

結論

非關聯式資料庫,特別是 MongoDB 這樣的文件導向資料庫,為現代軟體開發提供了靈活、高效的資料儲存解決方案。在 AWS Rawdata 這樣的場景中,MongoDB 的優勢尤為明顯,能夠輕鬆應對複雜多變的資料結構,並支援高效的查詢和分析,雖然,高效的前提是需要下不少功夫去調整索引、優化查詢等等,但現階段的我們知道這種資料庫的特性是什麼就可以了!


上一篇
關聯式資料庫:基礎概念介紹
下一篇
雲服務時代來臨:買車有比較省嗎?
系列文
30天轉職馬拉松:從0到Offer的學習計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言